package com.zkh.myframe.listener;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.zkh.myframe.core.FrameConfigure;
import com.zkh.myutils.database.dbpool.Pools;
import com.zkh.myutils.scheduled.ScheduledTaskScanner;
import com.zkh.myutils.utils.Regexp;
import com.zkh.myutils.utils.StringUtils;

/**
 * 框架初始化核心监听器
 * @author zkh
 */
public class InitialListener implements ServletContextListener {
	//项目名
	private static String contextName = "";
	//获取项目名
	public static String getContextName(){
		return contextName;
	}
	
	/**
	 * 启动应用时触发
	 */
	public void contextInitialized(ServletContextEvent event) {
		//保存项目名
		contextName = event.getServletContext().getServletContextName();
		//获取加载的jar包
		String classPath = System.getProperty("java.class.path");
		//获取插件
		List<File> pluginList = StringUtils.isEmpty(classPath) ? new ArrayList<>()
				: Arrays.stream(classPath.split(";")).filter(jar->Regexp.isEndWith("[\\\\/]myframe-plugin-[\\-\\w.]+\\.jar", jar)).map(File::new).collect(Collectors.toList());
		//加载系统配置文件
		FrameConfigure.loadFrameConfig(pluginList);
		//检查定时任务并启用
		ScheduledTaskScanner.checkRun(FrameConfigure.getScheduledBeanMap());
	}

	/**
	 * 停止应用时触发
	 */
	public void contextDestroyed(ServletContextEvent event) {
		//销毁连接池
		Pools.destoryPools();
		//关闭定时任务
		ScheduledTaskScanner.cancleScheduledTask();
	}
}
